# Libraries
library(tidyverse)
library(cowplot)
library(lme4)
library(ARTool)

# Color palette
three_colors = c("#1b9e77", "#785ef0", "#e6ab02")
four_colors = c("#1b9e77", "#d95f02", "#7570b3", "#e7298a")
five_colors = c("#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#e6ab02")
six_colors = c("#1b9e77", "#d95f02", "#7570b3", "#e7298a", "#e6ab02", "#66a61e")

# Modules Completed
completed <-
  read.csv("query_outputs/module_survey_completion.csv") 
self_reported <-
  read.csv("query_outputs/participation_counts_modules.csv") 

# Module Efficacy
module1_training <- read.csv("query_outputs/module1_training.csv") 
module2_training <- read.csv("query_outputs/module2_training.csv") 
module3_training <- read.csv("query_outputs/module3_training.csv") 
module4_training <- read.csv("query_outputs/module4_training.csv") 

gender <- read.csv("query_outputs/gender.csv") %>% 
  mutate(gender = ifelse(answer == "1", "Male", 
                  ifelse(answer == "2", "Female",
                  ifelse(answer == "3", "Non-Binary/Third Gender", 
                  ifelse(answer == "4", "Prefer not to answer", "NULL"))))) %>% 
  select(recipient_id, gender)

# Spider Curiosity
spider_curiosity_individual <- read.csv("query_outputs/spider_curiosity_individual.csv") %>% 
  mutate(change = post_answer - pre_answer)
spider_curiosity_composite <- read.csv("query_outputs/spider_curiosity_composite.csv")  %>% 
  mutate(change = post_answer_composite - pre_answer_composite,
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
spider_curiosity_composite <- left_join(spider_curiosity_composite, gender, 
                                      by = "recipient_id")

# Spider Phobia

spider_phobia_individual <- read.csv("query_outputs/spider_phobia_individual.csv") %>% 
  mutate(change = post_answer - pre_answer)
spider_phobia_composite <- read.csv("query_outputs/spider_phobia_composite.csv") %>% 
  #filter(recipient_id != 82,
  #       recipient_id != 41) %>% # outliers?
  mutate(change = post_answer_composite - pre_answer_composite,
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
spider_phobia_composite <- left_join(spider_phobia_composite, gender, by = "recipient_id")

# Spider Changed Attitudes
spider_change_attitudes <- read.csv("query_outputs/spider_change_attitudes.csv") %>% 
  mutate(ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
spider_change_attitudes <- left_join(spider_change_attitudes, gender, by = "recipient_id")

# Sci Comm Anticipated Outcomes
anticipated_outcomes_individual <- read.csv("query_outputs/anticipated_outcomes_individual.csv") %>% 
  mutate(change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
anticipated_outcomes_individual <- left_join(anticipated_outcomes_individual, gender, by = "recipient_id")

# Sci Comm Self-Worth
self_worth_individual <- read.csv("query_outputs/self_worth_individual.csv") %>% 
  mutate(change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
self_worth_individual <- left_join(self_worth_individual, gender, by = "recipient_id")

# Sci Comm Perceived Costs
perceived_costs_individual <- read.csv("query_outputs/perceived_costs_individual.csv") %>% 
  mutate(change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
perceived_costs_individual <- left_join(perceived_costs_individual, gender, by = "recipient_id")

# Perceived Sci Comm Ability
scicomm_identity_individual <- read.csv("query_outputs/scicomm_identity_individual.csv") %>% 
  filter(pre_answer != "NULL",
         post_answer != "NULL") %>% 
  mutate(post_answer = as.numeric(post_answer),
         pre_answer = as.numeric(pre_answer),
         change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
scicomm_identity_individual <- left_join(scicomm_identity_individual, gender, by = "recipient_id")

# Communication Confidence
comm_confidence_individual <- read.csv("query_outputs/comm_confidence_individual.csv") %>% 
  filter(pre_answer != "NULL",
         post_answer != "NULL") %>% 
  mutate(post_answer = as.numeric(post_answer),
         pre_answer = as.numeric(pre_answer),
         change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
comm_confidence_individual <- left_join(comm_confidence_individual, gender, by = "recipient_id")

# Sci Comm Echo Chambers
echo_chambers_individual <- read.csv("query_outputs/echo_chambers_individual.csv") %>% 
  filter(pre_answer != "NULL",
         post_answer != "NULL") %>% 
  mutate(post_answer = as.numeric(post_answer),
         pre_answer = as.numeric(pre_answer),
         change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
echo_chambers_individual <- left_join(echo_chambers_individual, gender, by = "recipient_id")

# Science Identity
science_identity_individual <- read.csv("query_outputs/science_identity_individual.csv") %>% 
  filter(pre_answer != "NULL",
         post_answer != "NULL") %>% 
  mutate(post_answer = as.numeric(post_answer),
         pre_answer = as.numeric(pre_answer),
         change = post_answer - pre_answer, 
         ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
science_identity_individual <- left_join(science_identity_individual, gender, by = "recipient_id")


# Sci Comm Change Interest
scicomm_change_interest <- read.csv("query_outputs/scicomm_change_interest.csv") %>% 
  mutate(ele = ifelse(ele == 1, "ELE + Modules", "Modules Only"))
scicomm_change_interest <- left_join(scicomm_change_interest, gender, by = "recipient_id")

Modules Completed

First, I wanted to see how many participants completed the workshop modules. I could achieve this in two different ways:

  • The number of surveys completed after each module

  • The number of self-reported (from the post-training survey) completed module workshops

The numbers on the bars represent the raw number of participants.

Completed Module Surveys

Spring 2022 had the highest module survey completion.

WITH module_summary AS(
    SELECT
      COALESCE(m1.recipient_id, m2.recipient_id, m3.recipient_id, m4.recipient_id) AS recipient_id,
      p.iteration,
      CASE WHEN m1.recipient_id IS NULL THEN 0 ELSE 1 END AS module1,
      CASE WHEN m2.recipient_id IS NULL THEN 0 ELSE 1 END AS module2,
      CASE WHEN m3.recipient_id IS NULL THEN 0 ELSE 1 END AS module3,
      CASE WHEN m4.recipient_id IS NULL THEN 0 ELSE 1 END AS module4,
      (CASE WHEN m1.recipient_id IS NULL THEN 0 ELSE 1 END +
       CASE WHEN m2.recipient_id IS NULL THEN 0 ELSE 1 END +
       CASE WHEN m3.recipient_id IS NULL THEN 0 ELSE 1 END +
       CASE WHEN m4.recipient_id IS NULL THEN 0 ELSE 1 END) AS module_count
    FROM training.module1 m1
    FULL JOIN training.module2 m2 
      ON m1.recipient_id = m2.recipient_id
    FULL JOIN training.module3 m3 
      ON COALESCE(m1.recipient_id, m2.recipient_id) = m3.recipient_id
    FULL JOIN training.module4 m4 
      ON COALESCE(m1.recipient_id, m2.recipient_id, m3.recipient_id) = m4.recipient_id
    -- Add the join to participants
    LEFT JOIN training.participants p 
      ON COALESCE(m1.recipient_id, m2.recipient_id, m3.recipient_id, m4.recipient_id) = p.recipient_id
    GROUP BY 
      COALESCE(m1.recipient_id, m2.recipient_id, m3.recipient_id, m4.recipient_id),
      p.iteration,
      m1.recipient_id, m2.recipient_id, m3.recipient_id, m4.recipient_id
    ORDER BY recipient_id
)

SELECT iteration, module_count, COUNT(*) AS n_participants
FROM module_summary
GROUP BY iteration, module_count
ORDER BY iteration, module_count;
# set factor level order
completed <- completed %>% 
  mutate(module_count = factor(module_count),
         module_count = fct_relevel(module_count, "4", "3", "2", "1"),
         iteration = factor(iteration),
         iteration = fct_relevel(iteration, 
                                 "Spring 2023", "Fall 2022", "Spring 2022"))

# Sets the positions for where to put the raw numebrs in the graph
completed$position <- c(0.12, 0.36, 0.7, 0.05, 0.175, 
                        0.325, 0.65, 0.097, 0.24, 0.65)

# Makes the graph
completed %>% 
  ggplot() +
    geom_bar(aes(x = n_participants, y = iteration, fill = module_count), 
             position = "fill", stat = "identity") +
    geom_text(aes(x = position, y = iteration, label = n_participants)) +
    scale_x_continuous(labels = scales::percent) +
  scale_fill_manual("No. Modules Surveys Completed", 
                 values = four_colors) +
  xlab("") +
  ylab("") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text = element_text(size = 14, color = "black"),
        legend.text = element_text(size = 14, color = "black"),
        legend.title = element_text(size = 14, color = "black")) +
  guides(fill = guide_legend(reverse=TRUE))

# 650 x 450

Self-Reported in Post-Survey

Spring 2022 had the highest participation in the post-training survey.

SELECT answer_count, iteration, COUNT(*) AS n_participants
FROM(
    SELECT posttest.recipient_id, iteration, COUNT(answer) AS answer_count
    FROM training.posttest
    JOIN training.participants
    ON posttest.recipient_id = participants.recipient_id
    JOIN training.questions
    ON posttest.question_id = questions.question_id
    WHERE posttest.question_id LIKE 'participation%'
    AND posttest.question_id NOT LIKE 'participation5'
    GROUP BY posttest.recipient_id, iteration
)
GROUP BY answer_count, iteration
ORDER BY iteration, answer_count;
# set factor level order
self_reported <- self_reported %>% 
  mutate(answer_count = factor(answer_count),
         answer_count = fct_relevel(answer_count, "4", "3", "2", "1"),
         iteration = factor(iteration),
         iteration = fct_relevel(iteration, 
                                 "Spring 2023", "Fall 2022", "Spring 2022"))

# Sets the positions for where to put the raw numebrs in the graph
self_reported$position <- c(0.31, 0.81, 0.07, 0.57, 
                              0.02, 0.09, 0.54, 0.98)

# Makes the graph
self_reported %>% 
  ggplot() +
    geom_bar(aes(x = n_participants, y = iteration, fill = answer_count), 
             position = "fill", stat = "identity") +
    geom_text(aes(x = position, y = iteration, label = n_participants)) +
    scale_x_continuous(labels = scales::percent) +
  scale_fill_manual("No. Self-Reported Modules Completed", 
                 values = four_colors) +
  xlab("") +
  ylab("") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text = element_text(size = 14, color = "black"),
        legend.text = element_text(size = 14, color = "black"),
        legend.title = element_text(size = 14, color = "black")) +
  guides(fill = guide_legend(reverse=TRUE))


Module Efficacy

Next, I wanted to explore the surveys provided after each module to look at the effectiveness of the module.

The numbers to the right indicate the number of survey responses associated with each statement.

SELECT iteration, module, module1.question_id, definition1, definition2, definition3, definition4, definition5, question, answer, COUNT(module1.recipient_id) AS response
FROM training.module1
JOIN training.participants
ON module1.recipient_id = participants.recipient_id
JOIN training.questions
ON module1.question_id = questions.question_id
GROUP BY iteration, module, module1.question_id, definition1, definition2, definition3, definition4, definition5, question, answer
ORDER BY iteration, question_id, answer;

All Levels

Students were a little less certain of the fourth module. Interestingly, none felt that they strongly disagreed with any statement in the fourth module.

five_colors_efficacy = c("#7570b3", "#1b9e77", "#e7298a", "#d95f02", "#e6ab02")

# Module 1
module1_training <- module1_training %>% 
  # Refactor to include the level indications
  mutate(answer = ifelse(answer == 1, "Strongly \ndisagree",
                  ifelse(answer == 2, "Somewhat \ndisagree",
                  ifelse(answer == 3, "Neither agree \nnor disagree", 
                  ifelse(answer == 4, "Somewhat \nagree", 
                  ifelse(answer == 5, "Strongly \nagree", "NA"))))),
        answer = fct_relevel(answer, "Strongly \nagree", "Somewhat \nagree", "Neither agree \nnor disagree", "Somewhat \ndisagree", "Strongly \ndisagree"),
         iteration, fct_relevel(iteration, "Spring 2023", "Fall 2022", "Spring 2022")) %>% 
  dplyr::select(iteration, question_id, question, answer, response) %>% 
  # Counts the number of participants selecting each level for each question
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Count the number of responses for that question
sum_module1 <- module1_training %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
# Graph Modules 1
module1_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module1_training) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module1) +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of \nAgreement", 
                 values = c("#7570b3", "#1b9e77", "#e7298a", "#d95f02", "#e6ab02"),
                 breaks = c("Neither agree \nnor disagree", "Strongly \nagree", "Somewhat \ndisagree", "Somewhat \nagree", "Strongly \ndisagree")) +
  xlab("") +
  ylab("Module 1") +
  coord_cartesian(clip = "off") + 
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 12, color = "black"),
        legend.text = element_text(size = 12, color = "black"),
        legend.title = element_text(size = 12, color = "black"),
        legend.margin = margin(0, 0, 0, -30)) +
  guides(fill = guide_legend(reverse = TRUE, nrow = 1))

# Module 2
module2_training <- module2_training %>% 
  # Refactor to include the level indications
  mutate(answer = ifelse(answer == 1, "Strongly \ndisagree",
                  ifelse(answer == 2, "Somewhat \ndisagree",
                  ifelse(answer == 3, "Neither agree \nnor disagree", 
                  ifelse(answer == 4, "Somewhat \nagree", 
                  ifelse(answer == 5, "Strongly \nagree", "NA"))))),
        answer = fct_relevel(answer, "Strongly \nagree", "Somewhat \nagree", "Neither agree \nnor disagree", "Somewhat \ndisagree", "Strongly \ndisagree"),
         iteration, fct_relevel(iteration, "Spring 2023", "Fall 2022", "Spring 2022")) %>% 
  dplyr::select(iteration, question_id, question, answer, response) %>% 
  # Counts the number of participants selecting each level for each question
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Count the number of responses for that question
sum_module2 <- module2_training %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
# Module 2 Graph
module2_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module2_training) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module2) +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = c("#7570b3", "#1b9e77", "#e7298a", "#d95f02", "#e6ab02"),
                 breaks = c("Neither agree \nnor disagree", "Strongly \nagree", "Somewhat \ndisagree", "Somewhat \nagree", "Strongly \ndisagree")) +
  xlab("") +
  ylab("Module 2") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 12, color = "black"),
        legend.text = element_text(size = 12, color = "black"),
        legend.title = element_text(size = 12, color = "black")) +
  guides(fill = guide_legend(nrow = 2))

# Module 3
module3_training <- module3_training %>% 
  # Refactor to include the level indications
  mutate(answer = ifelse(answer == 1, "Strongly \ndisagree",
                  ifelse(answer == 2, "Somewhat \ndisagree",
                  ifelse(answer == 3, "Neither agree \nnor disagree", 
                  ifelse(answer == 4, "Somewhat \nagree", 
                  ifelse(answer == 5, "Strongly \nagree", "NA"))))),
        answer = fct_relevel(answer, "Strongly \nagree", "Somewhat \nagree", "Neither agree \nnor disagree", "Somewhat \ndisagree", "Strongly \ndisagree"),
         iteration, fct_relevel(iteration, "Spring 2023", "Fall 2022", "Spring 2022")) %>% 
  dplyr::select(iteration, question_id, question, answer, response) %>% 
  # Counts the number of participants selecting each level for each question
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Count the number of responses for that question
sum_module3 <- module3_training %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
# Module 3 Graph
module3_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module3_training) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module3) +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = c("#7570b3", "#1b9e77", "#e7298a", "#d95f02", "#e6ab02"),
                 breaks = c("Neither agree \nnor disagree", "Strongly \nagree", "Somewhat \ndisagree", "Somewhat \nagree", "Strongly \ndisagree")) +
  xlab("") +
  ylab("Module 3") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 12, color = "black"),
        legend.text = element_text(size = 12, color = "black"),
        legend.title = element_text(size = 12, color = "black")) +
  guides(fill = guide_legend(nrow = 2))

# Module 4
module4_training <- module4_training %>% 
  filter(answer != "NULL") %>% 
  # Refactor to include the level indications
  mutate(answer = ifelse(answer == 1, "Strongly \ndisagree",
                  ifelse(answer == 2, "Somewhat \ndisagree",
                  ifelse(answer == 3, "Neither agree \nnor disagree", 
                  ifelse(answer == 4, "Somewhat \nagree", 
                  ifelse(answer == 5, "Strongly \nagree", "NA"))))),
        answer = fct_relevel(answer, "Strongly \nagree", "Somewhat \nagree", "Neither agree \nnor disagree", "Somewhat \ndisagree", "Strongly \ndisagree"),
         iteration, fct_relevel(iteration, "Spring 2023", "Fall 2022", "Spring 2022")) %>% 
  dplyr::select(iteration, question_id, question, answer, response) %>% 
  # Counts the number of participants selecting each level for each question
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Count the number of responses for that question
sum_module4 <- module4_training %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
# Module 4 Graph
module4_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module4_training) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module4) +
  scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = c("#7570b3", "#1b9e77", "#e7298a", "#d95f02", "#e6ab02"),
                 breaks = c("Neither agree \nnor disagree", "Strongly \nagree", "Somewhat \ndisagree", "Somewhat \nagree", "Strongly \ndisagree")) +
  xlab("") +
  ylab("Module 4") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 12, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        legend.text = element_text(size = 12, color = "black"),
        legend.title = element_text(size = 12, color = "black")) +
  guides(fill = guide_legend(nrow = 2))

# Combine the four module responses
plot_grid(module1_graph, module2_graph, module3_graph, module4_graph, 
          ncol=1, align="v", rel_heights = c(1.6, 1.2, 1.2, 1.4))

#1250 x 700

Generalized to Disgree/Neutral/Agree

Students were a little less certain of the fourth module.

# Module 1
# Regroup into Agree, Neutral, and Disagree
module1_simpler <- module1_training %>% 
  mutate(answer = ifelse(answer == "Strongly \nagree" | 
                         answer == "Somewhat \nagree", 
                         "Agree",
                  ifelse(answer == "Strongly \ndisagree" | 
                         answer == "Somewhat \ndisagree", 
                         "Disagree", "Neutral")),
         answer = fct_relevel(answer, "Agree", "Neutral", "Disagree")) %>% 
  # Recount
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Module 1 Graph
module1_simpler_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module1_simpler) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module1) +
  scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = three_colors) +
  xlab("") +
  ylab("Module 1") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 12, color = "black"),
        axis.text.y = element_text(size = 10, color = "black"),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black")) +
  guides(fill = guide_legend(reverse=TRUE))

# Module 2
# Regroup into Agree, Neutral, and Disagree
module2_simpler <- module2_training %>% 
  mutate(answer = ifelse(answer == "Strongly \nagree" | 
                         answer == "Somewhat \nagree", 
                         "Agree",
                  ifelse(answer == "Strongly \ndisagree" | 
                         answer == "Somewhat \ndisagree", 
                         "Disagree", "Neutral")),
         answer = fct_relevel(answer, "Agree", "Neutral", "Disagree")) %>% 
  # Recount
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Module 2 Graph
module2_simpler_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module2_simpler) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module2) +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = three_colors) +
  xlab("") +
  ylab("Module 2") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 12, color = "black"),
        axis.text.y = element_text(size = 10, color = "black"),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black")) 

# Module 3
# Regroup into Agree, Neutral, and Disagree
module3_simpler <- module3_training %>% 
  mutate(answer = ifelse(answer == "Strongly \nagree" | 
                         answer == "Somewhat \nagree", 
                         "Agree",
                  ifelse(answer == "Strongly \ndisagree" | 
                         answer == "Somewhat \ndisagree", 
                         "Disagree", "Neutral")),
         answer = fct_relevel(answer, "Agree", "Neutral", "Disagree")) %>% 
  # Recount
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Module 3 Graph
module3_simpler_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module3_simpler) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module3) +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = three_colors) +
  xlab("") +
  ylab("Module 3") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_blank(),
        axis.title.y = element_text(size = 12, color = "black"),
        axis.text.y = element_text(size = 10, color = "black"),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black"))

# Module 4
# Regroup into Agree, Neutral, and Disagree
module4_simpler <- module4_training %>% 
  mutate(answer = ifelse(answer == "Strongly \nagree" | 
                         answer == "Somewhat \nagree", 
                         "Agree",
                  ifelse(answer == "Strongly \ndisagree" | 
                         answer == "Somewhat \ndisagree", 
                         "Disagree", "Neutral")),
         answer = fct_relevel(answer, "Agree", "Neutral", "Disagree")) %>% 
  # Recount
  group_by(question_id, question, answer) %>% 
  summarize(response = sum(response))

# Module 4 Graph
module4_simpler_graph <- ggplot() +
    geom_bar(aes(x = response, y = question, fill = answer), 
             position = "fill", stat = "identity", data = module4_simpler) +
    geom_text(aes(x = y, y = question, label = total), data = sum_module4) +
  scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = three_colors) +
  xlab("") +
  ylab("Module 4") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 12, color = "black"),
        axis.text.y = element_text(size = 10, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black")) 

# Combine the four module responses
plot_grid(module1_simpler_graph, module2_simpler_graph, 
          module3_simpler_graph, module4_simpler_graph, 
          ncol=1, align="v", rel_heights = c(1.6, 1.2, 1.2, 1.4))


A Note on Stats

I used Shapiro-Wilk Normality Test to first test whether the response variable was normally distributed.

To make comparisons within ELE participation (participated or not) and genders (females or males):

  • If normally distributed: t-tests (unpaired or paired depending on the question).

  • If not normally distributed: non-parametric tests (Wilcoxon Rank Sum or Mann-Whitney U-test depending on the question). If the non-parametric results were similar to the parametric tests, I reported the parametric results.

  • For each question, I ran two tests - one including those with previous experience (with arachnids or scicomm) and one excluding those individuals.

  • In models that included gender, I restricted to those who identified as female or male because the sample size of other gender identifications were too low (3 did not answer, 3 chose non-binary/third gender, 1 preferred not to answer).

I think the ele x gender sample size is too small to look at interactions (only 4 modules only males).

Spiders

General Interest

The pre- and post-training surveys included the same seven statements that measured participant’s interest in spiders by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1 = strongly disagree, 5 = strongly agree). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (7 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about spider interest.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_type = 'Spider Curiosity';
spider_curiosity_individual_sum <- spider_curiosity_individual %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1,
         y3 = 1.4,
         question = factor(question),
         question = fct_relevel(question,
                                "I would like to read more about spiders.",
                                "I would like to know more about spiders.", 
                                "I would like to know more about how scientists study spiders.",
                                "Greater attention should be given to spider protection.",
                                "Spiders are interesting animals.", 
                                "People should use fewer chemicals in order to allow spiders to live.",
                                "I would like to watch a spider constructing its web."))

spider_curiosity_individual_sum$stats <- c("", "", "", "", "", "", "")
spider_curiosity_individual_sum$post_mean <- spider_curiosity_table$post_mean
spider_curiosity_individual_sum$n <- spider_curiosity_table$n

spider_curiosity_individual_sum %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question, color = question)) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question, color = question), width = 0.25) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  #geom_text(aes(x = y2, y = question, label = stats, 
  #              color = question), size = 5) +
  #geom_text(aes(x = y, y = question, label = post_mean, 
  #              color = question), size = 4) +
  #geom_text(aes(x = y3, y = question, label = n, 
  #              color = question), size = 4) +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1.5, 0.5))) +
  scale_x_continuous(limits = c(-0.5, 0.5), breaks = c(seq(-0.5, 0.5, 0.5))) +
  scale_color_manual(values = c("black", "black", "black", "black", "black", "black", "black")) +
  ylab("") +
  xlab("Disagreement ---------------- Agreement") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

# 800 x 400

Pre-Training Composite

Did pre-training spider interest scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

For each participant, I summed their responses to the seven statements using only the pre-training survey to get a pre-training composite score (i.e., how spider-curious a person was; higher score = more curious).

I restricted to only participants that responded to all seven statements in both the pre- and post-training surveys.

N = 48 ELE, 19 Modules; N = 41 ELE, 17 Modules excluding arachnid experienced

N = 46 Females, 17 Males; N = 38 Females, 16 Males excluding arachnid experienced

ELE attracted more spider curious people (P = 0.006 including arachnid-experienced vs P = 0.021 when removed). Pre-training spider interest did not differ by gender.

curiosity_composite_pre_sum_ele <- spider_curiosity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = spider_curiosity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = curiosity_composite_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = curiosity_composite_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(15, 35), breaks = seq(15, 35, 5)) +
  xlab("") +
  ylab("Pre-Training Spider Interest Composite Score \nLess interested ----------------------------More interested") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))
#size 14, 300 x 600


curiosity_composite_pre_sum_MF <- spider_curiosity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, 
              color = "grey60", data = spider_curiosity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = curiosity_composite_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = curiosity_composite_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(15, 35), breaks = seq(15, 35, 5)) +
  xlab("") +
  ylab("Pre-Training Spider Interest Composite Score \nLess interested ----------------------------More interested") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, ncol=2, align="v")


Change in Composite

Did shifts in spider interest scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training spider interest composite score to get the change in curiosity.

I restricted to only participants that responded to all seven statements in both the pre- and post-training surveys.

N = 48 ELE, 19 Modules; N = 41 ELE, 17 Modules excluding arachnid experienced

N = 46 Females, 17 Males; N = 38 Females, 16 Males excluding arachnid experienced

Shifts in spider interest scores did not differ by ELE participation or gender (including and excluding previous arachnid experience).

WITH spider_curiosity_composite AS (
  SELECT 
    pretest.recipient_id, 
    participants.iteration,
    SUM(pretest.answer) AS composite_pre,
    SUM(posttest.answer) AS composite_post,
    SUM(posttest.answer) - SUM(pretest.answer) AS total_change
  FROM training.pretest
  JOIN training.posttest
    ON pretest.recipient_id = posttest.recipient_id 
    AND pretest.question_id = posttest.question_id
  JOIN training.questions
    ON pretest.question_id = questions.question_id
  JOIN training.participants
    ON pretest.recipient_id = participants.recipient_id
  WHERE pretest.answer IS NOT NULL 
    AND posttest.answer IS NOT NULL
    AND questions.question_type = 'Spider Curiosity'
  GROUP BY pretest.recipient_id, participants.iteration
  HAVING COUNT(DISTINCT posttest.question_id) = 7 
),

ele_arachnid_experience AS (
  SELECT 
    posttest.recipient_id,
    participants.iteration,
    MAX(CASE 
          WHEN questions.question_id = 'participation5' THEN 
            CASE WHEN posttest.answer = 1 THEN 1 ELSE 0 END 
        END) AS ELE,
    MAX(CASE 
          WHEN questions.question_id = 'eval3_5_post_51' THEN 
            CASE WHEN posttest.answer = 1 THEN 1 
                 WHEN posttest.answer = 2 THEN 0 
            END
        END) AS course,
    MAX(CASE 
          WHEN questions.question_id = 'eval3_6_post_52' THEN 
            CASE WHEN posttest.answer = 1 THEN 1 
                 WHEN posttest.answer = 2 THEN 0 
            END
        END) AS research
  FROM training.posttest
  JOIN training.participants 
    ON participants.recipient_id = posttest.recipient_id
  JOIN training.questions 
    ON questions.question_id = posttest.question_id
  WHERE questions.question_id IN (
      'participation5', 
      'eval3_5_post_51', 
      'eval3_6_post_52'
  )
  GROUP BY posttest.recipient_id, participants.iteration
)

SELECT 
  scc.recipient_id,
  scc.iteration,
  scc.composite_pre,
  scc.composite_post,
  scc.total_change,
  eae.ELE,
  eae.course,
  eae.research
FROM spider_curiosity_composite scc
LEFT JOIN ele_arachnid_experience eae
  ON scc.recipient_id = eae.recipient_id
  AND scc.iteration = eae.iteration
ORDER BY scc.total_change;
curiosity_composite_sum_ele <- spider_curiosity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change),
            se = plotrix::std.error(change)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, 
              color = "grey60", data = spider_curiosity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = curiosity_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = curiosity_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-8, 8), breaks = seq(-8, 8, 4)) +
  xlab("") +
  ylab("Change in Spider Interest \nLess interested ----------------------More interested") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))


curiosity_composite_sum_MF <- spider_curiosity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change),
            se = plotrix::std.error(change)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,  
              color = "grey60", data = spider_curiosity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = curiosity_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = curiosity_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-8, 8), breaks = seq(-8, 8, 4)) +
  xlab("") +
  ylab("Change in Spider Interest \nLess interested ----------------------More interested") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, ncol=2, align="v")


Phobia

The pre- and post-training surveys included the same fifteen statements that measured participant’s phobia toward spiders by choosing true or false for each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (0 = FALSE, 1 = TRUE). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (15 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about spider phobia.

SELECT posttest.recipient_id, questions.question_id, question,
  CASE 
    WHEN pretest.answer = 1 THEN 1 
    WHEN pretest.answer = 2 THEN 0 
    ELSE NULL 
    END AS pre_answer,
  CASE 
    WHEN posttest.answer = 1 THEN 1 
    WHEN posttest.answer = 2 THEN 0 
    ELSE NULL 
  END AS post_answer
FROM training.pretest
JOIN training.posttest 
    ON pretest.recipient_id = posttest.recipient_id
    AND pretest.question_id = posttest.question_id
JOIN training.questions
    ON questions.question_id = pretest.question_id
    AND questions.question_id = posttest.question_id
WHERE pretest.answer IS NOT NULL 
    AND posttest.answer IS NOT NULL
    AND questions.question_type = 'Spider Phobia Questionaire';
spider_phobia_individual_sum <- spider_phobia_individual %>% 
  mutate(change = post_answer - pre_answer) %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  ungroup() %>% 
  mutate(order = c(1, 10, 11, 12, 13, 14, 15, 2, 3, 4, 5, 6, 7, 8, 9),
         y = 0.7,
         y2 = 0.5,
         y3 = 0.9,
         question = factor(question),
         question = fct_recode(question, 
                               "Even if I was late for a very important appointment, the thought of \nspiders would stop me from taking a shortcut through an underpass." = "Even if I was late for a very important appointment, the thought of spiders would stop me from taking a shortcut through an underpass. ", 
                               "I would prefer not to finish a story if something \nabout spiders was introduced into the plot." = "I would prefer not to finish a story if something about spiders was introduced into the plot.", 
                               "I would feel uncomfortable if a spider crawled out of \nmy shoe as I took it out of the closet to put it on." = "I would feel uncomfortable if a spider crawled out of my shoe as I took it out of the closet to put it on.", 
                               "I would not go down to the basement to get something \nif I thought there might be spiders down there." = "I would not go down to the basement to get something if I thought there might be spiders down there.", 
                               "If someone says that there are spiders \nanywhere about, I become alert and edgy." = "If someone says that there are spiders anywhere about, I become alert and edgy.", 
                               " If there is a spider on the ceiling over my bed, \nI cannot go to sleep unless someone kills it for me." = " If there is a spider on the ceiling over my bed, I cannot go to sleep unless someone kills it for me.", 
                               "I avoid going to parks or on camping trips \nbecause there may be spiders about." = "I avoid going to parks or on camping trips because there may be spiders about."),
         question = fct_relevel(question,
         "I avoid going to parks or on camping trips \nbecause there may be spiders about.",
         "I would feel some anxiety holding a toy spider in my hand.",
         "I dislike looking at pictures of spiders in a magazine. ",
         " If there is a spider on the ceiling over my bed, \nI cannot go to sleep unless someone kills it for me.",
         "I am terrified by the thought of touching a harmless spider.",
         "If someone says that there are spiders \nanywhere about, I become alert \nand edgy.",
         "I would not go down to the basement to get something \nif I thought there might be spiders down there.",
         "I would feel uncomfortable if a spider crawled out of \nmy shoe as I took it out of the closet to put it on.",
         "When I see a spider, I feel tense and restless.",
         "I feel sick when I see a spider.",
         "I shudder when I think of spiders.",
         "The way spiders move is repulsive.",
         "If I came upon a spider while cleaning the attic I would probably run.",
         "I would prefer not to finish a story if something \nabout spiders was introduced into the plot.",
         "Even if I was late for a very important appointment, the thought of \nspiders would stop me from taking a shortcut through an underpass.")) %>% 
  arrange(order)

spider_phobia_individual_sum$stats <- c("", "", "", "", "", "", "", "", "", "", "", "", "", "", "")
spider_phobia_individual_sum$post_mean <- spider_phobia_table$post_mean
spider_phobia_individual_sum$n <- spider_phobia_table$n

spider_phobia_individual_sum %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question, color = question)) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question, color = question), width = 0.25) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  #geom_text(aes(x = y2, y = question, label = stats, 
  #              color = question), size = 5) +
  #geom_text(aes(x = y, y = question, label = post_mean, 
  #              color = question), size = 4) +
  #geom_text(aes(x = y3, y = question, label = n, 
  #              color = question), size = 4) +
  #scale_x_continuous(limits = c(-0.5, 1.5), breaks = c(seq(-0.5, 1.5, 0.5))) +
  scale_x_continuous(limits = c(-0.5, 0.5), breaks = c(seq(-0.5, 0.5, 0.5))) +
  scale_color_manual(values = c("black", "black", "black", "black", "black", "black", "black",
                                "black", "black", "black", "black", "black", "black", "black", "black")) +
  ylab("") +
  xlab("Less phobic ------------------ More phobic") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

# 800 x 734

Pre-Training Composite

Did pre-training spider phobia scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

For each participant, I summed their responses to the fifteen statements using only the pre-training survey to get a pre-training composite score (i.e., how spider-phobic a person was; higher score = more phobic).

I restricted to only participants that responded to all fifteen statements in both the pre- and post-training surveys.

N = 44 ELE, 19 Modules; N = 38 ELE, N = 17 Modules excluding arachnid experienced

N = 43 Females, 17 Males; N = 36 Females, N = 16 Males excluding arachnid experienced

ELE participation was not affected by pre-training phobia score (including or excluding arachnid experience). Yet, females had higher phobia scores than males before participating in the training (P = 0.020 with arachnid experience and P = 0.010 without).

phobia_composite_pre_sum_ele <- spider_phobia_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = spider_phobia_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = phobia_composite_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = phobia_composite_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(0, 13), breaks = seq(0, 13, 3)) +
  xlab("") +
  ylab("Pre-Training Spider Phobia Composite Score \nLess phobic --------------------------More phobic") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

phobia_composite_pre_sum_MF <- spider_phobia_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = spider_phobia_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "#d95f02", data = phobia_composite_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = phobia_composite_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(0, 13), breaks = seq(0, 13, 3)) +
  xlab("") +
  ylab("Pre-Training Spider Phobia Composite Score \nLess phobic --------------------------More phobic") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, ncol=2, align="v")


Change in Composite

Did shifts in spider phobia scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training spider phobia composite score to get the change in phobia.

I restricted to only participants that responded to all fifteen statements in both the pre- and post-training surveys.

N = 44 ELE, 19 Modules; N = 38 ELE, N = 17 Modules excluding arachnid experienced

N = 43 Females, 17 Males; N = 36 Females, N = 16 Males excluding arachnid experienced

The change in phobia scores did not differ by ELE participation or gender (same result with and without outliers, and arachnid experience).

SELECT posttest.recipient_id, 
  SUM(CASE 
    WHEN pretest.answer = 1 THEN 1 
    WHEN pretest.answer = 2 THEN 0 
    ELSE NULL 
    END) AS pre_answer_composite,
  SUM(CASE 
    WHEN posttest.answer = 1 THEN 1 
    WHEN posttest.answer = 2 THEN 0 
    ELSE NULL 
  END) AS post_answer_composite,
  ele, arachnid_research, arachnid_course
FROM training.pretest
JOIN training.posttest 
    ON pretest.recipient_id = posttest.recipient_id
    AND pretest.question_id = posttest.question_id
JOIN training.questions
    ON questions.question_id = pretest.question_id
    AND questions.question_id = posttest.question_id
JOIN training.participants
    ON participants.recipient_id = posttest.recipient_id
    AND participants.recipient_id = pretest.recipient_id
WHERE pretest.answer IS NOT NULL 
    AND posttest.answer IS NOT NULL
    AND questions.question_type = 'Spider Phobia Questionaire'
GROUP BY posttest.recipient_id, ele, arachnid_research, arachnid_course
HAVING COUNT(DISTINCT posttest.question_id) = 15 
ORDER BY posttest.recipient_id;
phobia_composite_sum_ele <- spider_phobia_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change),
            se = plotrix::std.error(change)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = spider_phobia_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = phobia_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = phobia_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-15, 7), breaks = seq(-15, 6, 5)) +
  xlab("") +
  ylab("Change in Phobia of Spiders \nLess phobic --------------------More phobic") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

phobia_composite_sum_MF <- spider_phobia_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change),
            se = plotrix::std.error(change)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, 
              color = "grey60", data = spider_phobia_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = phobia_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = phobia_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-15, 7), breaks = seq(-15, 6, 5)) +
  xlab("") +
  ylab("Change in Phobia of Spiders \nLess phobic --------------------More phobic") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, ncol=2, align="v")


Changed Attitudes

Participants were asked to choose their level of agreement that participating in the workshops and activities has changed their attitudes toward spiders.

SELECT posttest.recipient_id, posttest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, definition6, definition7, answer, ele, arachnid_research, arachnid_course
FROM training.posttest
JOIN training.questions
ON posttest.question_id = questions.question_id
JOIN training.participants
ON posttest.recipient_id = participants.recipient_id
WHERE posttest.question_id = 'post27';

Level of Agreement

The numbers to the right indicate the number of survey responses per statement.

70% of participants had self-reported changed attitudes toward spiders following the training.

spider_change_attitudes_counts <- spider_change_attitudes %>% 
  filter(answer != "NULL") %>% 
  mutate(answer = ifelse(answer == 1, "Strongly \ndisagree",
                  ifelse(answer == 2, "Disagree", 
                  ifelse(answer == 3, "Somewhat \ndisagree",
                  ifelse(answer == 4, "Neither agree \nnor disagree", 
                  ifelse(answer == 5, "Somewhat \nagree", 
                  ifelse(answer == 6, "Agree",
                  ifelse(answer == 7, "Strongly \nagree", "NA"))))))),
         answer = fct_relevel(answer, "Strongly \nagree", "Agree", 
                              "Somewhat \nagree", "Neither agree \nnor disagree", 
                              "Somewhat \ndisagree", "Disagree"),
         question = fct_recode(question, "Participating in these workshops \nand activities has changed \nmy attitudes toward spiders." = "Participating in these workshops and activities has changed my attitudes toward spiders.")) %>%
  group_by(question, question_id, answer) %>% 
  count() %>% 
  mutate(response = n) %>% 
  dplyr::select(question_id, question, answer, response)

spider_change_attitudes_sum <- spider_change_attitudes_counts %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
ggplot() +
    geom_bar(aes(x = response, y = factor(question), fill = answer), 
             position = "fill", stat = "identity", 
             data = spider_change_attitudes_counts) +
    geom_text(aes(x = y, y = factor(question), label = total), 
              data = spider_change_attitudes_sum) +
  annotate(geom = 'segment', y = 1.5,  x = 0.30, xend = 1, yend = 1.5) +
  #annotate(geom = 'text', y = 1.53,  x = 0.65, label = "70% Agree") +
    scale_y_discrete() +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("Level of Agreement", 
                 values = c("#66a61e", "#7570b3", "#e6ab02", "#d95f02", "#e7298a", "#1b9e77"),
                 breaks = c("Disagree", "Somewhat \nagree", "Somewhat \ndisagree", "Agree", "Neither agree \nnor disagree", "Strongly \nagree")) +
  xlab("") +
  ylab("") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"),
        axis.text.y = element_blank(),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black")) #+

#  guides(fill = guide_legend(reverse=TRUE))
# size 14 and 12, 850 x 300

ELE and Gender

I compared responses to this statement by ELE participation (ELE + Modules vs. Modules Only) and gender (Female vs. Male).

Points and errorbars are the mean and standard error. The jittered points represent each individual response.

ELE participants expressed greater changes in spider attitudes than those that did not participate in ELE (P = 0.003 including arachnid experienced, P = 0.004 excluding arachnid experienced). There was no difference by gender.

# stats
sca <- spider_change_attitudes %>% 
  filter(answer != "NULL") %>% 
  mutate(answer = as.numeric(answer),
         ele = fct_relevel(ele, "ELE + Modules", "Modules Only"),
         question = fct_recode(question,
           "Participating in these workshops and activities \nhas changed my attitudes toward spiders." = 
             "Participating in these workshops and activities has changed my attitudes toward spiders."))

sca_filtered <- sca %>% 
  filter(arachnid_research == 0,
         arachnid_course == 0)

sca_MF <- sca %>% 
  filter(gender == "Female" | gender == "Male")

sca_filtered_MF <- sca_filtered %>% 
  filter(gender == "Female" | gender == "Male")

# not normal, same results so use ttest, arachnid experience doesn't matter
shapiro.test(sca$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sca$answer
## W = 0.92177, p-value = 0.0002846
shapiro.test(sca_filtered$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sca_filtered$answer
## W = 0.91036, p-value = 0.0002538
shapiro.test(sca_MF$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sca_MF$answer
## W = 0.9202, p-value = 0.0004093
shapiro.test(sca_filtered_MF$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sca_filtered_MF$answer
## W = 0.90908, p-value = 0.0004103
t.test(answer ~ ele, data = sca)
## 
##  Welch Two Sample t-test
## 
## data:  answer by ele
## t = 3.1027, df = 42.353, p-value = 0.003409
## alternative hypothesis: true difference in means between group ELE + Modules and group Modules Only is not equal to 0
## 95 percent confidence interval:
##  0.2881083 1.3595107
## sample estimates:
## mean in group ELE + Modules  mean in group Modules Only 
##                     5.30000                     4.47619
#t.test(answer ~ ele, data = sca_filtered)
t.test(answer ~ gender, data = sca_MF)
## 
##  Welch Two Sample t-test
## 
## data:  answer by gender
## t = -1.6474, df = 31.593, p-value = 0.1094
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -1.1548470  0.1223722
## sample estimates:
## mean in group Female   mean in group Male 
##             4.957447             5.473684
#t.test(answer ~ gender, data = sca_filtered_MF)
#wilcox.test(answer ~ ele, data = sca)
#wilcox.test(answer ~ ele, data = sca_filtered)
#wilcox.test(answer ~ gender, data = sca_MF)
#wilcox.test(answer ~ gender, data = sca_filtered_MF)

#anova(art(answer ~ factor(ele) * factor(gender), data = sca_MF))
#anova(art(answer ~ factor(ele) * factor(gender), data = sca_filtered_MF))

# wrangle for graph
spider_change_attitudes_ele <- sca %>% 
  group_by(ele, question_id, question) %>% 
  summarize(mean = mean(answer),
            se = plotrix::std.error(answer))

# graph
ele <- ggplot() +
    geom_hline(yintercept = 4, linetype = "dashed", linewidth = 0.5, color = "grey50") +
  geom_jitter(aes(x = ele, y = answer), color = "grey50", 
              width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, data = sca) +
  geom_point(aes(x = ele, y = mean), size = 3, data = spider_change_attitudes_ele, 
             color = "#d95f02") +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                color = "#d95f02", linewidth = 1.5, width = 0.15,
                data = spider_change_attitudes_ele) +
  xlab("") +
  ylab("Level of Agreement") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black")) #+
  #facet_wrap(~question)
#400 x 300

# wrangle for graph
spider_change_attitudes_MF <- sca_MF %>% 
  group_by(gender, question_id, question) %>% 
  summarize(mean = mean(answer),
            se = plotrix::std.error(answer))

# graph
gender <- ggplot() +
  geom_jitter(aes(x = gender, y = answer), color = "grey50", 
              width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, data = sca_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, data = spider_change_attitudes_MF, 
             color = "black") +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                color = "black", linewidth = 1.5, width = 0.15,
                data = spider_change_attitudes_MF) +
  xlab("") +
  ylab("Level of Agreement") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black")) #+
  #facet_wrap(~question)

plot_grid(ele, gender, ncol=2, align="v")


Science Communication

Intent to Engage

The pre- and post-training surveys included the same four statements that measured participant’s intent to engage in science communication by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1 = strongly disagree, 5 = strongly agree). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (4 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about intent to engage in science communication.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id LIKE 'prepost14_%';
anticipated_outcomes_individual_sum <- anticipated_outcomes_individual %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1,
         y3 = 1.4,
         question = factor(question),
         question = fct_recode(question,
          "I will be successful at engaging in \nscience communication in the next year." = 
            "I will be successful at engaging in science communication in the next year.",
          "The public will be more accepting of science \nafter I engage in science communication." = 
            "The public will be more accepting of science after I engage in science communication.", 
          "I will not be successful in learning new \nconcepts related to science communication." = 
            "I will not be successful in learning new concepts related to science communication.",
          "Engaging in science communication \nwill improve my job performace." = 
            "Engaging in science communication will improve my job performace."),
         question = fct_relevel(question, 
          "I will be successful at engaging in \nscience communication in the next year.",
          "The public will be more accepting of science \nafter I engage in science communication.",
          "I will not be successful in learning new \nconcepts related to science communication.",
          "Engaging in science communication \nwill improve my job performace."))

anticipated_outcomes_individual_sum$stats <- c("", "", "* / NS", "")
anticipated_outcomes_individual_sum$post_mean <- anticipated_outcomes_table$post_mean
anticipated_outcomes_individual_sum$n <- anticipated_outcomes_table$n

anticipated_outcomes_individual_sum %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question, color = question)) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question, color = question), width = 0.25) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  #geom_text(aes(x = y2, y = question, label = stats, 
  #              color = question), size = 5) +
  #geom_text(aes(x = y, y = question, label = post_mean, 
  #              color = question), size = 4) +
  #geom_text(aes(x = y3, y = question, label = n, 
  #              color = question), size = 4) +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1.5, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.7, 0.5))) +
  scale_color_manual(values = c("black", "black", "#7570b3", "black")) +
  ylab("") +
  xlab("Disagreement --------------------------- Agreement") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

# 800 x 250

Pre-Training Composite

Did pre-training intent to engage scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the scale for negative statements (change response 1 to 5, etc.). For each participant, I summed their responses to the four statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = greater intent to engage).

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 31 without experience, 37 with experience

N = 46 Females, 18 Males

ELE attracted participants with greater intention to engage in science communication scores (P = 0.012). There was no effect of gender or previous experience.

outcomes_composite_pre_sum_ele <- anticipated_outcomes_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = outcomes_composite_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = outcomes_composite_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(10, 20), breaks = seq(10, 20, 2)) +
  xlab("") +
  ylab("Pre-Training Intent to Engage Composite Score \nLesser intention ---------------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, hjust = 1, vjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_pre_sum_MF <- anticipated_outcomes_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = outcomes_composite_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(10, 20), breaks = seq(10, 20, 2)) +
  xlab("") +
  ylab("Pre-Training Intent to Engage Composite Score \nLesser intention -------------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_pre_sum <- anticipated_outcomes_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = outcomes_composite_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(10, 20), breaks = seq(10, 20, 2)) +
  xlab("") +
  ylab("Pre-Training Intent to Engage Composite Score \nLesser intention -------------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in intent to engage scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training intent to engage in science communication composite score.

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 31 without experience, 37 with experience

N = 46 Females, 18 Males

Males showed decreased intentions to engage compared to females (P = 0.043). ELE participation and experience had no effect.

outcomes_composite_sum_ele <- anticipated_outcomes_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = outcomes_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Intent to Engage in Science Communication \nLesser intention ---------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_sum_MF <- anticipated_outcomes_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite, color = M_noele), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, data = anticipated_outcomes_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "#d95f02", data = outcomes_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = outcomes_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_color_manual(values = c("#d95f02", "black")) +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Intent to Engage in Science Communication \nLesser intention ---------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_sum <- anticipated_outcomes_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = outcomes_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Intent to Engage in Science Communication \nLesser intention ---------------------- Greater intention") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Attainment Value

The pre- and post-training surveys included the same six statements that measured attainment values of science communication by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1 = strongly disagree, 5 = strongly agree). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (6 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about attainment values of science communication.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id LIKE 'prepost7_%';
self_worth_individual_sum <- self_worth_individual %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1,
         y3 = 1.4,
         question = factor(question),
         question = fct_recode(question,
          "Engaging in science communication \nimproves my self worth."=
            "Engaging in science communication improves my self worth.",
          "Successfully communicating my research to \nthe public makes me feel good about myself." = 
            "Successfully communicating my research to the public makes me feel good about myself.", 
          "I believe engaging in science communication \nis necessary for me to feel successful." = "I believe engaging in science communication is necessary for me to feel successful.",
          "Engaging in science communication \nis not necessary to show I am competent." = 
            "Engaging in science communication is not necessary to show I am competent.",
          "I value the prestige associated with \nbeing a top science communicator." = 
            "I value the prestige associated with being a top science communicator.",
          "I do not need to prove myself by \nparticipating in science communication." = 
            "I do not need to prove myself by participating in science communication."),
         question = fct_relevel(question, 
          "Engaging in science communication \nimproves my self worth.",
          "Successfully communicating my research to \nthe public makes me feel good about myself.",
          "I believe engaging in science communication \nis necessary for me to feel successful.",
          "Engaging in science communication \nis not necessary to show I am competent.",
          "I value the prestige associated with \nbeing a top science communicator.",
          "I do not need to prove myself by \nparticipating in science communication."))

self_worth_individual_sum$stats <- c("", "", "", "", "", "")
self_worth_individual_sum$post_mean <- self_worth_table$post_mean
self_worth_individual_sum$n <- self_worth_table$n

self_worth_individual_sum %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question, color = question)) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question, color = question), width = 0.25) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  #geom_text(aes(x = y2, y = question, label = stats, 
  #              color = question), size = 5) +
  #geom_text(aes(x = y, y = question, label = post_mean, 
  #              color = question), size = 4) +
  #geom_text(aes(x = y3, y = question, label = n, 
  #              color = question), size = 4) +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1.5, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  scale_color_manual(values = c("black", "black", "black", "black", "black", "black")) +
  ylab("") +
  xlab("Disagreement --------------------------- Agreement") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

# 800 x 350

Pre-Training Composite

Did pre-training attainment value scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the rankings for negative statements (change response 1 to 5, etc.). For each participant, I summed their responses to the six statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = greater attainment value).

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 46 ELE, 20 Modules

N = 37 with experience, 29 without experience

N = 45 Females, 17 Males

ELE attracted participants that viewed science communication with greater attainment value (P = 0.035). There was no effect of gender or experience.

self_worth_composite_pre_sum_ele <- self_worth_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = self_worth_composite_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = self_worth_composite_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(15, 30), breaks = seq(15, 30, 3)) +
  xlab("") +
  ylab("Pre-Training Attainment Value Composite Score \nLower value -------------------------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

self_worth_composite_pre_sum_MF <- self_worth_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = self_worth_composite_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = self_worth_composite_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(15, 30), breaks = seq(15, 30, 3)) +
  xlab("") +
  ylab("Pre-Training Attainment Value Composite Score \nLower value -------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

self_worth_composite_pre_sum <- self_worth_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = self_worth_composite_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = self_worth_composite_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(15, 30), breaks = seq(15, 30, 3)) +
  xlab("") +
  ylab("Pre-Training Attainment Value Composite Score \nLower value -------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in attainment value scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training composite score to get the change in attainment value.

I restricted to only participants that responded to all six statements in both the pre- and post-training surveys.

N = 46 ELE, 20 Modules

N = 37 with experience, 29 without experience

N = 45 Females, 17 Males

ELE participation nor gender affected the change in attainment value scores.

self_worth_composite_sum_ele <- self_worth_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = self_worth_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = self_worth_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 6), breaks = seq(-6, 6, 2)) +
  xlab("") +
  ylab("Change in Attainment Value \nLower value ---------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

self_worth_composite_sum_MF <- self_worth_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = self_worth_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = self_worth_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 6), breaks = seq(-6, 6, 2)) +
  xlab("") +
  ylab("Change in Attainment Value \nLower value ---------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

self_worth_composite_sum <- self_worth_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = self_worth_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = self_worth_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = self_worth_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 6), breaks = seq(-6, 6, 2)) +
  xlab("") +
  ylab("Change in Attainment Value \nLower value ---------------------- Greater value") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Cost Belief Value

The pre- and post-training surveys included the same five statements that measured participant’s perceived costs of science communication by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1 = strongly disagree, 5 = strongly agree). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (5 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about science communication costs.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id LIKE 'prepost8_%';
perceived_costs_individual_sum <- perceived_costs_individual %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1,
         y3 = 1.4,
         question = factor(question),
         question = fct_recode(question,
          "Engaging in science communication will \ntake time away from my  job responsibilities." = 
            "Engaging in science communication will take time away from my  job responsibilities. ",
          "Science communication will provide me \nopportunities for interdisciplinary collaboration." = 
            "Science communication will provide me opportunities for interdisciplinary collaboration.", 
          "Engaging in science communication will cause \nme to lose credibility with my peers." = 
            "Engaging in science communication will cause me to lose credibility with my peers.",
          "Engaging in science communication will \ntake funds away from other activities." = 
            "Engaging in science communication will take funds away from other activities.",
          "I would waste too much time if \nI engaged in science communication." = 
            "I would waste too much time if I engaged in science communication."),
         question = fct_relevel(question, 
          "Engaging in science communication will \ntake time away from my  job responsibilities.",
          "Science communication will provide me \nopportunities for interdisciplinary collaboration.",
          "Engaging in science communication will cause \nme to lose credibility with my peers.",
          "Engaging in science communication will \ntake funds away from other activities.",
          "I would waste too much time if \nI engaged in science communication."))

perceived_costs_individual_sum$stats <- c("", "* / .", "", "", "")
perceived_costs_individual_sum$post_mean <- perceived_costs_table$post_mean
perceived_costs_individual_sum$n <- perceived_costs_table$n

perceived_costs_individual_sum %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question, color = question)) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question, color = question), width = 0.25) +
  geom_vline(xintercept = 0, linetype = "dashed") +
  #geom_text(aes(x = y2, y = question, label = stats, 
  #              color = question), size = 5) +
  #geom_text(aes(x = y, y = question, label = post_mean, 
  #              color = question), size = 4) +
  #geom_text(aes(x = y3, y = question, label = n, 
  #              color = question), size = 4) +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1.5, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  scale_color_manual(values = c("black", "#7570b3", "black", "black", "black")) +
  ylab("") +
  xlab("Disagreement --------------------------- Agreement") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

# 800 x 300

Pre-Training Composite

Did pre-training cost belief value scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the rankings for opposing statements (change response 1 to 5, etc.). For each participant, I summed their responses to the five statements using only the pre-training survey to get a pre-training composite score (i.e. higher score = more costly).

I restricted to only participants that responded to all five statements in both the pre- and post-training surveys.

N = 47 ELE, 19 Modules

N = 36 with experience, 30 without experience

N = 46 Females, 16 Males

ELE attracted participants with lower perceived costs of science communication scores (P = 0.005). There was no effect of gender or previous experience.

costs_composite_pre_sum_ele <- perceived_costs_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, 
              color = "grey60", data = perceived_costs_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = costs_composite_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = costs_composite_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 4)) +
  xlab("") +
  ylab("Pre-Training Cost Belief Value Composite Score \nLess costs ---------------------------------------- More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, hjust = 1, vjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

costs_composite_pre_sum_MF <- perceived_costs_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = perceived_costs_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = costs_composite_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = costs_composite_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 4)) +
  xlab("") +
  ylab("Pre-Training Cost Belief Value Composite Score \nLess costs -------------------------- More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

costs_composite_pre_sum <- perceived_costs_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = perceived_costs_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = costs_composite_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = costs_composite_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 4)) +
  xlab("") +
  ylab("Pre-Training Cost Belief Value Composite Score \nLess costs -------------------------- More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in cost belief value scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training composite score to get the change in perceived costs.

I restricted to only participants that responded to all five statements in both the pre- and post-training surveys.

N = 47 ELE, 19 Modules

N = 36 with experience, 30 without experience

N = 46 Females, 16 Males

ELE participation, gender, nor experience affected the change in cost belief value scores.

outcomes_composite_sum_ele <- anticipated_outcomes_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = outcomes_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Cost Belief Value Scores \nLess costs ----------------------More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_sum_MF <- anticipated_outcomes_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = outcomes_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Cost Belief Value Scores \nLess costs ----------------------More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

outcomes_composite_sum <- anticipated_outcomes_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = anticipated_outcomes_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = outcomes_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = outcomes_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-7, 5), breaks = seq(-6, 4, 2)) +
  xlab("") +
  ylab("Change in Cost Belief Value Scores \nLess costs ----------------------More costs") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Sci Comm Confidence

The pre- and post-training surveys included the same four statements that measured participants’confidence as science communicators by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1-5). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (4 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants had higher confidence as science communicators after the training.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id = 'prepost10' OR 
    questions.question_id = 'prepost11' OR
    questions.question_id = 'prepost12' OR
    questions.question_id = 'prepost13';
prepost10 <- scicomm_identity_individual %>% 
  filter(question_id == 'prepost10') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.96, 
         n = 68,
         stats = "***",
         question = "How good are you at \nscience communication?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "#d95f02", size = 3) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.15, linewidth = 1.5, color = "#d95f02") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  geom_text(aes(x = y2, y = question, label = stats), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y, y = question, label = post_mean), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y3, y = question, label = n), 
            size = 4, color = "#d95f02") +
  scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  ylab("") +
  xlab("Not at all good ------------------ Very good") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 14, color = "black"))

prepost11 <- scicomm_identity_individual %>% 
  filter(question_id == 'prepost11') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.85, 
         n = 68,
         stats = "***",
         question = "How well does the public \nunderstand your science when \nyou communicate it to them?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), size = 3, color = "#d95f02") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.15, linewidth = 1.5, color = "#d95f02") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black", linewidth = 0.5) +
  geom_text(aes(x = y2, y = question, label = stats), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y, y = question, label = post_mean), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y3, y = question, label = n), 
            size = 4, color = "#d95f02") +
  scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  ylab("") +
  xlab("Less understanding --- More understanding") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 14, color = "black"))

#color = "#7570b3"
color = "#d95f02"
prepost12 <- scicomm_identity_individual %>% 
  filter(question_id == 'prepost12') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 2.54, 
         n = 68,
         stats = "NS",
         question = "If you were to list all the students/staff \nin your department from the worst to \nthe best in science communication, \nwhere would you place yourself?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), size = 3, color = color) +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.15, linewidth = 1.5, color = color) +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black", linewidth = 0.5) +
  geom_text(aes(x = y2, y = question, label = stats), 
            size = 4, color = color) +
  geom_text(aes(x = y, y = question, label = post_mean), 
            size = 4, color = color) +
  geom_text(aes(x = y3, y = question, label = n), 
            size = 4, color = color) +
  scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  ylab("") +
  xlab("One of the best ----------- One of the worst") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 14, color = "black"))

prepost13 <- scicomm_identity_individual %>% 
  filter(question_id == 'prepost13') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 2.25, 
         n = 67,
         stats = "*",
         question = "Think about the classes and \nprofessional development training \nyou have had in the past. How good \nof a job did they prepare you to \nengage in science communication?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), size = 3, color = "#d95f02") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.15, linewidth = 1.5, color = "#d95f02") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black", linewidth = 0.5) +
  geom_text(aes(x = y2, y = question, label = stats), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y, y = question, label = post_mean), 
            size = 4, color = "#d95f02") +
  geom_text(aes(x = y3, y = question, label = n), 
            size = 4, color = "#d95f02") +
  scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  ylab("") +
  xlab("More prepared --------------- Less prepared") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.x = element_text(size = 14, color = "black"))


plot_grid(prepost10, prepost11, prepost12, prepost13, ncol=1, align="v")

# 650 x 450

Pre-Training Composite

Did pre-training science communication confidence scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the rankings for negative statements (change response 1 to 5, etc.). For each participant, I summed their responses to the four statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = greater confidence).

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 47 ELE, 20 Modules

N = 37 with experience, N = 30 without experience

N = 45 Females, 18 Males

There were no differences in pre-training science communication confidence by ELE participation, experience, or gender.

scicomm_identity_pre_sum_ele <- scicomm_identity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 3)) +
  xlab("") +
  ylab("Pre-Training Sci Comm Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

scicomm_identity_pre_sum_MF <- scicomm_identity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 3)) +
  xlab("") +
  ylab("Pre-Training Sci Comm Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

scicomm_identity_pre_sum <- scicomm_identity_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(5, 20), breaks = seq(5, 20, 3)) +
  xlab("") +
  ylab("Pre-Training Sci Comm Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in sci comm confidence scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training science communication conficence composite score.

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 47 ELE, 20 Modules

N = 37 with experience, N = 30 without experience

N = 45 Females, 18 Males

ELE participants had greater shifts in science communication confidence compared to those who did not participate in ELE (P = 0.015). There was no effect of gender or previous experience.

identity_composite_sum_ele <- scicomm_identity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
    geom_hline(yintercept = 0, linetype = "dashed", color = "grey50", linewidth = 0.5) +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey50", data = scicomm_identity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = identity_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = identity_composite_sum_ele) +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Sci. Comm. Confidence \nLower confidence ------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, hjust = 1, vjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))
#400 x 450

identity_composite_sum_MF <- scicomm_identity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = identity_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = identity_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Science Communication Confidence \nLower confidence --------- Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

identity_composite_sum <- scicomm_identity_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = identity_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = identity_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Science Communication Confidence \nLower confidence --------- Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Changed Interest

Participants were asked to choose their level of agreement that participating in the workshops and activities has changed their interest in conveying science to the public.

SELECT posttest.recipient_id, posttest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, definition6, definition7, answer, ele, scicomm, isl, after_school
FROM training.posttest
JOIN training.questions
ON posttest.question_id = questions.question_id
JOIN training.participants
ON posttest.recipient_id = participants.recipient_id
WHERE posttest.question_id = 'post28';

Level of Agreement

The numbers to the right indicate the number of survey responses per statement.

89% of participants had self-reported increases in interest in science communication following the training.

scicomm_change_interest_counts <- scicomm_change_interest %>% 
  filter(answer != "NULL") %>% 
  mutate(answer = ifelse(answer == 1, "Much less \ninterested",
                  ifelse(answer == 2, "A little \ninterested", 
                  ifelse(answer == 3, "The same",
                  ifelse(answer == 4, "A little more \ninterested", 
                  ifelse(answer == 5, "Much more \ninterested", "NA"))))),
         answer = fct_relevel(answer, "Much more \ninterested", "A little more \ninterested", 
                              "The same", "A little \ninterested", "Much less \ninterested"),
         question = fct_recode(question, "After participating in the training and events, \nhow much more or less interested are you in \nconveying science to the general public?" = "After participating in the training and events, how much more or less interested are you in conveying science to the general public?")) %>%
  group_by(question, question_id, answer) %>% 
  count() %>% 
  mutate(response = n) %>% 
  dplyr::select(question_id, question, answer, response)

scicomm_change_interest_sum <- scicomm_change_interest_counts %>% 
  group_by(question) %>% 
  summarize(total = sum(response)) %>% 
  mutate(y = 1.1)
  
ggplot() +
    geom_bar(aes(x = response, y = factor(question), fill = answer), 
             position = "fill", stat = "identity", data = scicomm_change_interest_counts) +
    geom_text(aes(x = y, y = factor(question), label = total), 
              data = scicomm_change_interest_sum) +
  annotate(geom = 'segment', y = 1.5,  x = 0.11, xend = 1, yend = 1.5) +
  #annotate(geom = 'text', y = 1.53,  x = 0.555, label = "89% More Interested") +
    scale_y_discrete() +
    scale_x_continuous(labels = scales::percent) +
    scale_fill_manual("", 
                 values = five_colors) +
  xlab("") +
  ylab("") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.y = element_text(size = 12, color = "black"),
        axis.text.y = element_blank(),
        legend.text = element_text(size = 10, color = "black"),
        legend.title = element_text(size = 10, color = "black")) +
  guides(fill = guide_legend(reverse=TRUE))


ELE, Experience, and Gender

I compared responses to this statement between ELE participants and those who only completed the modules.

Points and errorbars are the mean and standard error. The jittered points represent each individual response.

ELE participants, experience, and gender did not differ in interest in science communication.

# stats
sci <- scicomm_change_interest %>% 
  filter(answer != "NULL") %>% 
  mutate(answer = as.numeric(answer),
         ele = fct_relevel(ele, "ELE + Modules", "Modules Only"),
         question = fct_recode(question,
           "After participating in the training and events, \nhow much more or less interested are you in \nconveying science to the general public?" = 
             "After participating in the training and events, how much more or less interested are you in conveying science to the general public?"),
         experience = ifelse((scicomm + isl + after_school) > 0, "With Experience", "Without Experience"))

sci_MF <- sci %>% 
  filter(gender == "Female" | gender == "Male")


# not normal, use t-test
shapiro.test(sci$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sci$answer
## W = 0.78538, p-value = 9.961e-09
shapiro.test(sci_MF$answer)
## 
##  Shapiro-Wilk normality test
## 
## data:  sci_MF$answer
## W = 0.77946, p-value = 1.432e-08
t.test(answer ~ ele, data = sci)
## 
##  Welch Two Sample t-test
## 
## data:  answer by ele
## t = 0.64732, df = 35.837, p-value = 0.5216
## alternative hypothesis: true difference in means between group ELE + Modules and group Modules Only is not equal to 0
## 95 percent confidence interval:
##  -0.2560268  0.4960268
## sample estimates:
## mean in group ELE + Modules  mean in group Modules Only 
##                        4.32                        4.20
t.test(answer ~ experience, data = sci)
## 
##  Welch Two Sample t-test
## 
## data:  answer by experience
## t = -0.047363, df = 57.923, p-value = 0.9624
## alternative hypothesis: true difference in means between group With Experience and group Without Experience is not equal to 0
## 95 percent confidence interval:
##  -0.3578551  0.3413125
## sample estimates:
##    mean in group With Experience mean in group Without Experience 
##                         4.282051                         4.290323
t.test(answer ~ gender, data = sci_MF)
## 
##  Welch Two Sample t-test
## 
## data:  answer by gender
## t = -1.2644, df = 33.428, p-value = 0.2148
## alternative hypothesis: true difference in means between group Female and group Male is not equal to 0
## 95 percent confidence interval:
##  -0.6250413  0.1457580
## sample estimates:
## mean in group Female   mean in group Male 
##             4.234043             4.473684
#wilcox.test(answer ~ ele, data = sci)
#wilcox.test(answer ~ experience, data = sci)
#wilcox.test(answer ~ gender, data = sci_MF)

summary(aov(answer ~ factor(ele) + factor(gender) + factor(experience), data = sci_MF))
##                    Df Sum Sq Mean Sq F value Pr(>F)
## factor(ele)         1  0.562  0.5620   1.142  0.289
## factor(gender)      1  0.733  0.7327   1.488  0.227
## factor(experience)  1  0.124  0.1237   0.251  0.618
## Residuals          62 30.521  0.4923

# wrangle for graph
change_interest_ele <- sci %>% 
  group_by(ele, question_id, question) %>% 
  summarize(mean = mean(answer),
            se = plotrix::std.error(answer))

# graph
ele <- ggplot() +
  geom_hline(yintercept = 3, linetype = "dashed", linewidth = 0.5, color = "grey50") +
  geom_jitter(aes(x = ele, y = answer), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, 
              color = "grey50", data = sci) +
  geom_point(aes(x = ele, y = mean), size = 3, data = change_interest_ele, 
             color = "#d95f02") +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, 
                data = change_interest_ele) +
  xlab("") +
  ylab("Level of Interest") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black")) #+
  #facet_wrap(~question)

# wrangle for graph
change_interest_MF <- sci_MF %>% 
  group_by(gender, question_id, question) %>% 
  summarize(mean = mean(answer),
            se = plotrix::std.error(answer))

# graph
gender <- ggplot() +
  geom_hline(yintercept = 3, linetype = "dashed", linewidth = 0.5, color = "grey50") +
  geom_jitter(aes(x = gender, y = answer), color = "grey50", width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, data = sci_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, data = change_interest_MF, 
             color = "black") +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                color = "black", linewidth = 1, width = 0.25,
                data = change_interest_MF) +
  xlab("") +
  ylab("Level of Interest") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))# +
  #facet_wrap(~question)

change_interest <- sci %>% 
  group_by(experience, question_id, question) %>% 
  summarize(mean = mean(answer),
            se = plotrix::std.error(answer))

# graph
experience <- ggplot() +
  geom_hline(yintercept = 3, linetype = "dashed", linewidth = 0.5, color = "grey50") +
  geom_jitter(aes(x = experience, y = answer), color = "grey50", width = 0.2, height = 0.1, alpha = 0.5, size = 1.5, data = sci) +
  geom_point(aes(x = experience, y = mean), size = 3, data = change_interest, 
             color = "black") +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                color = "black", linewidth = 1, width = 0.25,
                data = change_interest) +
  xlab("") +
  ylab("Level of Interest") +
  theme_classic() +
  theme(legend.position = "top",
        axis.text.x = element_text(size = 14, color = "black"),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))# +
  #facet_wrap(~question)

plot_grid(ele, gender, experience, ncol=3, align="v")


Communication Generally

Communication Confidence

The pre- and post-training surveys included the same four statements that measured participants’ confidence as communicators by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1-4). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (4 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about communication confidence.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id = 'prepost15' OR
    questions.question_id = 'prepost16' OR
    questions.question_id = 'prepost17' OR
    questions.question_id = 'prepost18';
prepost15 <- comm_confidence_individual %>% 
  filter(question_id == 'prepost15') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.84, 
         n = 68,
         stats = "* / NS",
         question = "How comfortable do you feel presenting to groups?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "#7570b3") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "#7570b3") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "#7570b3") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "#7570b3") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "#7570b3") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Very comfortable ------------ Not at all comfortable") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost16 <- comm_confidence_individual %>% 
  filter(question_id == 'prepost16') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 2.07, 
         n = 68,
         stats = "* / NS",
         question = "How much do you like presenting to groups?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "#7570b3") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "#7570b3") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "#7570b3") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "#7570b3") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "#7570b3") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("A lot ----------------------------------- Not at all") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost17 <- comm_confidence_individual %>% 
  filter(question_id == 'prepost17') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 2.09, 
         n = 68,
         stats = "",
         question = "How much do you feel you're a role model?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("A lot ----------------------------------- Not at all") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost18 <- comm_confidence_individual %>% 
  filter(question_id == 'prepost18') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.85, 
         n = 68,
         stats = "",
         question = "How confident are you in working with kids?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Very confident ---------------- Not at all confident") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

plot_grid(prepost15, prepost16, prepost17, prepost18, ncol=1, align="v")

# 800 x 350

Pre-Training Composite

Did pre-training communication confidence scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the rankings for negative statements (change response 1 to 4, etc.). For each participant, I summed their responses to the four statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = higher confidence).

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 37 with experience, N = 31 without experience

N = 46 Females, 18 Males

There were no differences in pre-training communication confidence for ELE participation, experience, or gender.

scicomm_identity_pre_sum_ele <- scicomm_identity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(4, 16), breaks = seq(4, 16, 4)) +
  xlab("") +
  ylab("Pre-Training Communication Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

scicomm_identity_pre_sum_MF <- scicomm_identity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(4, 16), breaks = seq(4, 16, 4)) +
  xlab("") +
  ylab("Pre-Training Communication Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

scicomm_identity_pre_sum <- scicomm_identity_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = scicomm_identity_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = scicomm_identity_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = scicomm_identity_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(4, 16), breaks = seq(4, 16, 4)) +
  xlab("") +
  ylab("Pre-Training Communication Confidence Composite Score \nLower confidence ------------ Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in communication confidence scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training communication confidence composite score.

I restricted to only participants that responded to all four statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 37 with experience, N = 31 without experience

N = 46 Females, 18 Males

ELE participation, experience, and gender did not affect changes in communication confidence.

confidence_composite_sum_ele <- comm_confidence_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = comm_confidence_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = confidence_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = confidence_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 8), breaks = seq(-4, 8, 2)) +
  xlab("") +
  ylab("Change in Communciation Confidence \nLower confidence --------- Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

confidence_composite_sum_MF <- comm_confidence_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = comm_confidence_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = confidence_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = confidence_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 8), breaks = seq(-4, 8, 2)) +
  xlab("") +
  ylab("Change in Communciation Confidence \nLower confidence --------- Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

confidence_composite_sum <- comm_confidence_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = comm_confidence_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = confidence_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = confidence_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 8), breaks = seq(-4, 8, 2)) +
  xlab("") +
  ylab("Change in Communciation Confidence \nLower confidence --------- Higher confidence") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Echo Chambers

Echo Chambers

The pre- and post-training surveys included the same six statements about participants’ echo chambers by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (1-5). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (6 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about echo chambers.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school, arachnid_course, arachnid_research
FROM training.pretest
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id = 'prepost19' OR
    questions.question_id = 'prepost20' OR
    questions.question_id = 'prepost21' OR
    questions.question_id = 'prepost22' OR
    questions.question_id = 'prepost23' OR
    questions.question_id = 'prepost24';
prepost19 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost19') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.32, 
         n = 68,
         stats = "",
         question = "In general, how often do members \nof the public ask you about science? ") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Never ---------------------------- Very often") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost20 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost20') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.37, 
         n = 68,
         stats = "",
         question = "How would you describe the people who \ndo ask you questions about science? ") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Different from me -------------- Similar to me") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost21 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost21') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.34, 
         n = 68,
         stats = "",
         question = "Think about the people who you talk to about \nscience. How would you describe these people?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Different attitudes/ -------- Similar attitudes/ \nbeliefs from me                 beliefs to me") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost22 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost22') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.16, 
         n = 68,
         stats = "",
         question = "How often do you engage the public \nin discussions about science?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Never ---------------------------- Very often") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost23 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost23') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.75, 
         n = 68,
         stats = "",
         question = "Consider the groups of people you spend time \nwith socially. How would you describe them?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Different values/ --------- Similar values/ \nattitudes from me           attitudes to me") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost24 <- echo_chambers_individual %>% 
  filter(question_id == 'prepost24') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.16, 
         n = 68,
         stats = "",
         question = "Think about times you have delivered \npresentations related to science. How \nwould you generally describe your audience?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Different values/ --------- Similar values/ \nattitudes from me           attitudes to me") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

plot_grid(prepost19, prepost20, prepost21, prepost22, prepost23, prepost24, ncol=1, align="v", rel_heights = c(1,1,1.1,1,1.1,1.3))

# 800 x 550

Pre-Training Composite

Did pre-training echo chamber scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

For each participant, I summed their responses to the six statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = Greater similarity).

I restricted to only participants that responded to all six statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 37 with experience, 31 without experience

N = 46 Females, 18 Males

There were no differences in pre-training participant echo chambers by ELE participation, experience, or gender.

echo_chambers_pre_sum_ele <- echo_chambers_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = echo_chambers_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_pre_sum_ele) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(13, 25), breaks = seq(13, 25, 3)) +
  xlab("") +
  ylab("Pre-Training Echo Chamber Composite Score \nMore different ------------ More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

echo_chambers_pre_sum_MF <- echo_chambers_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = echo_chambers_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_pre_sum_MF) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(13, 25), breaks = seq(13, 25, 3)) +
  xlab("") +
  ylab("Pre-Training Echo Chamber Composite Score \nMore different ------------ More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

echo_chambers_pre_sum <- echo_chambers_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = echo_chambers_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_pre_sum) +
  #geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(13, 25), breaks = seq(13, 25, 3)) +
  xlab("") +
  ylab("Pre-Training Echo Chamber Composite Score \nMore different ------------ More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in echo chamber scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training echo chamber composite score.

I restricted to only participants that responded to all six statements in both the pre- and post-training surveys.

N = 48 ELE, 20 Modules

N = 37 with experience, 31 without experience

N = 46 Females, 18 Males

ELE participation, experience, and gender did not affect changes in echo chambers.

echo_chambers_composite_sum_ele <- echo_chambers_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = echo_chambers_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 11), breaks = seq(-5, 11, 4)) +
  xlab("") +
  ylab("Change in Echo Chambers Scores \nMore different --------- More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

echo_chambers_composite_sum_MF <- echo_chambers_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = echo_chambers_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 11), breaks = seq(-5, 11, 4)) +
  xlab("") +
  ylab("Change in Echo Chambers Scores \nMore different --------- More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

echo_chambers_composite_sum <- echo_chambers_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = echo_chambers_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = echo_chambers_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = echo_chambers_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-5, 11), breaks = seq(-5, 11, 4)) +
  xlab("") +
  ylab("Change in Echo Chambers Scores \nMore different --------- More similar") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Science Generally

Science Identity

The pre- and post-training surveys included the same eight statements that measured participants’ science identity by choosing their level of agreement with each statement.

Pre vs. Post By Statement

Did participating in NESA training result in shifts in any individual statement?

Purple indicates P < 0.05 before Bonferroni correction.

Orange indicates P < 0.05 additionally after Bonferroni correction.

Points/error bars = mean ± 95% CI. The first printed number is the post-training average value (mixture of 1-4 and 1-5). The second printed number indicates the number of survey responses associated with each statement. Asterisks represent the P-value before / after Bonferroni correction (8 Statements):

  • *** P < 0.001

  • ** P < 0.01

  • * P < 0.05

  • . P < 0.1

Participants showed no significant shifts toward any statement about science identity.

SELECT pretest.recipient_id, iteration, pretest.question_id, question, answer_type, definition1, definition2, definition3, definition4, definition5, pretest.answer AS pre_answer, posttest.answer AS post_answer, ele, scicomm, isl, after_school
FROM training.pretest
JOIN training.posttest
ON pretest.recipient_id = posttest.recipient_id AND pretest.question_id = posttest.question_id
JOIN training.questions
ON pretest.question_id = questions.question_id
JOIN training.participants
ON pretest.recipient_id = participants.recipient_id
WHERE pretest.answer IS NOT NULL AND posttest.answer IS NOT NULL
AND questions.question_id = 'prepost29' OR
    questions.question_id = 'prepost30' OR
    questions.question_id = 'prepost31' OR
    questions.question_id = 'prepost32' OR
    questions.question_id = 'prepost33' OR
    questions.question_id = 'prepost34' OR
    questions.question_id = 'prepost35' OR
    questions.question_id = 'prepost36';
prepost29 <- science_identity_individual %>% 
  filter(question_id == 'prepost29') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 4.18, 
         n = 68,
         stats = "",
         question = "How much do you think you \nare a science kind of person?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("None at all --------------------------- A great deal") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost30 <- science_identity_individual %>% 
  filter(question_id == 'prepost30') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 4.01, 
         n = 68,
         stats = "",
         question = "How much do others think you \nare a science kind of person?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("None at all --------------------------- A great deal") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost31 <- science_identity_individual %>% 
  filter(question_id == 'prepost31') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.88, 
         n = 68,
         stats = "",
         question = "How good are you at science?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Excellent ------------------------------------- Poor") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost32 <- science_identity_individual %>% 
  filter(question_id == 'prepost32') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 3.41, 
         n = 68,
         stats = "",
         question = "When you were younger, how much \ndid you want to become a scientist?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("None at all --------------------------- A great deal") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost33 <- science_identity_individual %>% 
  filter(question_id == 'prepost33') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 4.38, 
         n = 68,
         stats = ". / NS",
         question = "How much do you like learning \nabout new discoveries?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "#785ef0") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "#785ef0") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "#785ef0") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("None at all --------------------------- A great deal") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost34 <- science_identity_individual %>% 
  filter(question_id == 'prepost34') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.63, 
         n = 68,
         stats = "",
         question = "How much, if at all, do you \nwant to become a scientist?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("A lot ----------------------------------------- Not at all") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost35 <- science_identity_individual %>% 
  filter(question_id == 'prepost35') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.28, 
         n = 68,
         stats = "",
         question = "How important is science \nto your future career?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Very important ---------------- Not at all important") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_blank(),
        axis.title.x = element_text(size = 12, color = "black"))

prepost36 <- science_identity_individual %>% 
  filter(question_id == 'prepost36') %>% 
  group_by(question_id, question) %>% 
  summarize(mean_change = mean(change),
            se_change = plotrix::std.error(change)) %>% 
  mutate(y = 1.2,
         y2 = 1, 
         y3 = 1.4,
         post_mean = 1.97, 
         n = 68,
         stats = "",
         question = "How interested are you in \npursuing a career in education?") %>% 
  ggplot() +
  geom_point(aes(x = mean_change, y = question), color = "black") +
  geom_errorbar(aes(xmax = mean_change + 1.96 * se_change, 
                    xmin = mean_change - 1.96 * se_change, 
                    y = question), width = 0.25, color = "black") +
  geom_vline(xintercept = 0, linetype = "dashed", color = "black") +
  #geom_text(aes(x = y2, y = question, label = stats), 
  #          size = 5, color = "black") +
  #geom_text(aes(x = y, y = question, label = post_mean), 
  #          size = 4, color = "black") +
  #geom_text(aes(x = y3, y = question, label = n), 
  #          size = 4, color = "black") +
  #scale_x_continuous(limits = c(-0.7, 1.5), breaks = c(seq(-0.5, 1, 0.5))) +
  scale_x_continuous(limits = c(-0.7, 0.7), breaks = c(seq(-0.5, 0.5, 0.5))) +
  ylab("") +
  xlab("Very interested -------------- Not at all interested") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.y = element_text(size = 12, color = "black"),
        axis.text.x = element_text(size = 12, color = "black"),
        axis.title.x = element_text(size = 12, color = "black"))

plot_grid(prepost29, prepost30, prepost31, prepost32, prepost33, prepost34, prepost35, prepost36, ncol=1, align="v")

# 800 x 550

Pre-Training Composite

Did pre-training science identity scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

First, I reversed the rankings for negative statements (change response 1 to 5 or 1 to 4, etc.). For each participant, I summed their responses to the eight statements using only the pre-training survey to get a pre-training composite score (i.e., higher score = greater science identity).

I restricted to only participants that responded to all eight statements in both the pre- and post-training surveys.

N = 46 ELE, 20 Modules

N = 35 with experience, 35 without experience

N = 44 Females, 18 Males

ELE attracted participants with higher science identities (P = 0.035). Gender and experience had no effect.

science_identity_pre_sum_ele <- science_identity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "#d95f02", data = science_identity_pre_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "#d95f02", width = 0.15, data = science_identity_pre_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(18, 36), breaks = seq(18, 36, 3)) +
  xlab("") +
  ylab("Pre-Training Science Identity Composite Score \nLower identity ------------------------------ Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, hjust = 1, vjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

science_identity_pre_sum_MF <- science_identity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = science_identity_pre_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = science_identity_pre_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(18, 36), breaks = seq(18, 36, 3)) +
  xlab("") +
  ylab("Pre-Training Science Identity Composite Score \nLower identity ------------ Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

science_identity_pre_sum <- science_identity_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(pre_answer_composite),
            se = plotrix::std.error(pre_answer_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = pre_answer_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = science_identity_pre_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = science_identity_pre_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(18, 36), breaks = seq(18, 36, 3)) +
  xlab("") +
  ylab("Pre-Training Science Identity Composite Score \nLower identity ------------ Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")


Change in Composite

Did shifts in science identity scores differ by ELE participation (ELE + Modules vs. Modules Only) or gender (Female vs. Male)?

I subtracted the pre- from the post-training science identity composite score.

I restricted to only participants that responded to all seven statements in both the pre- and post-training surveys.

N = 46 ELE, 20 Modules

N = 35 with experience, 35 without experience

N = 44 Females, 18 Males

ELE participation, experience, and gender had no effects on change in science identity.

science_identity_composite_sum_ele <- science_identity_composite %>% 
  group_by(ele) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

ele <- ggplot() +
  geom_jitter(aes(x = ele, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite) +
  geom_point(aes(x = ele, y = mean), size = 3, color = "black", data = science_identity_composite_sum_ele) +
  geom_errorbar(aes(x = ele, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = science_identity_composite_sum_ele) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Science Identity \nLower identity --------- Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

science_identity_composite_sum_MF <- science_identity_composite_MF %>% 
  group_by(gender) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

gender <- ggplot() +
  geom_jitter(aes(x = gender, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite_MF) +
  geom_point(aes(x = gender, y = mean), size = 3, color = "black", data = science_identity_composite_sum_MF) +
  geom_errorbar(aes(x = gender, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = science_identity_composite_sum_MF) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Science Identity \nLower identity --------- Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

science_identity_composite_sum <- science_identity_composite %>% 
  group_by(experience) %>% 
  summarize(mean = mean(change_composite),
            se = plotrix::std.error(change_composite)) 

experience <- ggplot() +
  geom_jitter(aes(x = experience, y = change_composite), width = 0.2, height = 0.1, alpha = 0.5, size = 1.5,
              color = "grey60", data = science_identity_composite) +
  geom_point(aes(x = experience, y = mean), size = 3, color = "black", data = science_identity_composite_sum) +
  geom_errorbar(aes(x = experience, ymax = mean + se, ymin = mean - se), 
                linewidth = 1.5, color = "black", width = 0.15, data = science_identity_composite_sum) +
  geom_hline(yintercept = 0, linetype = "dashed", color = "black") +
  scale_y_continuous(limits = c(-4, 10), breaks = seq(-4, 10, 2)) +
  xlab("") +
  ylab("Change in Science Identity \nLower identity --------- Higher identity") +
  theme_classic() +
  theme(legend.position = "none",
        axis.text.x = element_text(size = 14, color = "black", angle = 45, vjust = 1, hjust = 1),
        axis.title.y = element_text(size = 14, color = "black"),
        axis.text.y = element_text(size = 14, color = "black"))

plot_grid(ele, gender, experience, ncol=3, align="v")